<?php if (!defined('INDEX')) { trigger_error("Index is not defined!", E_USER_ERROR); exit(); }
/**
 * Тут хранятся всякие - разные необходимые классы и функции для проекта. Проще говоря - бардак!
 * @package habrabookmarks
 *
 * @author       Max Kamashev <max.kamashev@floscoeli.com>
 * @copyright    floscoeli.com ©2009
 * @license      http://opensource.org/licenses/gpl-3.0.html
 * @version      SVN: $Id: functions.php 19 2009-02-23 18:01:51Z M.Kamashev $
 *
 * settings:     ts: 4 spaces, eof: lf (unix), codepage: UTF-8
 */

/**
 * Реализация функции __autoload для всех классов
 * @param string $class_name Строка с названием класса
 * @access protected Уровень доступа
 * @return void
 */
function __autoload($class_name) {
    if (file_exists(dirname(dirname(__FILE__)).'/services/'.$class_name.'.service.php')) {
        require_once dirname(dirname(__FILE__)).'/services/'.$class_name.'.service.php';
    } elseif ($class_name == 'Service') {
        require_once dirname(dirname(__FILE__)).'/services/'.'services.php';
    } else {
        trigger_error('Не удалось найти файл с классом '.$class_name."\n", E_USER_ERROR);
    }
}

/**
 * Возвращает массив с доступными сервисами закладок
 * @return mixed array
 * TODO Кэшировать результат работы функции
 */
function getServices() {
    $sd = scandir(dirname(dirname(__FILE__)).'/services/');
    $services = array();
    foreach ($sd as $file_name) {
        $pos = strpos($file_name, '.service.php');
        if (!$pos) { continue; }

        $class_name = substr($file_name, 0, $pos);
        $services[$class_name]['filename'] = $file_name;
        //FIXME Сделать обработку ошибок
        $class = new $class_name;
        $services[$class_name]['description'] = $class->description();
        $services[$class_name]['exportForm'] = $class->exportFormRender();
        $services[$class_name]['importForm'] = $class->importFormRender();
        $services[$class_name]['export'] = $class->export;
        $services[$class_name]['import'] = $class->import;
    }
    return $services;
}